Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2022-CVPR-[Dist-PU] Positive-Unlabeled Learning from a Label Distribution Perspective

https://openaccess.thecvf.com/content/CVPR2022/papers/Zhao_Dist-PU_Positive-Unlabeled_Learning_From_a_Label_Distribution_Perspective_CVPR_2022_paper.pdf

Introduction

PUのCost-sensitiveの研究は、Negative Assumptionといって過度にデータをNegativeに分類させてしまう。以下のように、全体の割合の0.4から大きく逸脱することになる。

Image in a image block

なので、U Dataについての予測した各サンプルのスコアの平均とClass Priorが大きく逸れないようにしたい。だが、明示的な解としてすべてのUの予測がπ\piになってしまうのがあるので、それを防ぐためにEntropyの項をつけた。

Methodology

  • x∈X⊆Rd\mathbf{x} \in X \subseteq \mathbb{R}^dで、Ground Truthのラベルy=1y=1はPでy=0y=0がN。
  • 2setのいずれでも問題はない。

Cost-sensitiveの式で導いた時、

  • Pの部分のcalibrateされた予測値の和は1にならないといけない。
  • Uの部分のcalibrateされた予測値の和はπ\piにならないといけない。

この2点がこの手法の提案の核心。

本体の式

nnPUの式は以下のようになる。

πE+[l(g(x),+1)]+∣−πE+[l(g(x),−1)]+EX[l(g(x),−1)]∣\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + |-\pi \mathbb{E}_+[l(g(\mathbf{x}), -1)] + \mathbb{E}_X[l(g(\mathbf{x}), -1)]|

だが、今回は以下のようなclippingをする。

2πE+[l(g(x),+1)]+∣EX[l(g(x),−1)]−π∣2\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi|

実際はg(x)g(\mathbf{x})の出力値をlogitとして扱いsigmoid関数ffをかませて、f(g(x))f(g(\mathbf{x}))がクラスの予測確率である。そして、予測したラベルは本来離散的であるべきだが、これからの計算の都合上連続的であるようにする。

具体的には、あるデータ群に対するラベルの平均は、f(g(x))f(g(\mathbf{x}))の予測値の平均をとる感じである。この平均について、P全体では1に、U全体ではπ\piになるようにしたい。

これは、以上のclippingされた式に対して、次のように目的の値からのズレで評価し、MAE損失を使う。

2πE+[l(g(x),+1)]+∣EX[l(g(x),−1)]−π∣→Rlab=2π∣E+[f(g(x))]−1∣+∣EX[l(g(x),−1)]−π∣2\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi| \rightarrow \\ R_{lab} = 2\pi |\mathbb{E}_+[f(g(\mathbf{x}))] - 1| + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi|

だが、このままではすべてのUの予測がπ\piに収束するような自明な解に収束してしまう。これを防ぐために、以下のような選択をする。

Entropy Minimization

Uがすべてπ\piにならなくするには、Entropy Minimizationをさせて、全体的に極端な予測を行わせるようにする。Uのすべてのデータについて行う。

s=f(g(x))Lent=−EX[(1−s)log⁡(1−s)+slog⁡s]s = f(g(\mathbf{x}))\\ L_{ent} = - \mathbb{E}_X[(1 - s) \log (1 - s) + s \log s]

Confirmation Bias

Entropy Minimizationは明確に分けるという目的を達成できるが、一方本来曖昧なものを極端に推し進めてしまうのもある。最初に間違えた予測のまま拡大されたら、まずい。

これはConfirmation Biasという。

これを解決するため、データを以下のようにMixupする。

Image in a image block

そして、このようにMix-upしたデータに対して、以下のようにBinary Cross Entropyで損失を追加で計算する。

s′=f(g(λ′x1+(1−λ′)x2))Lmix=E(x1,x2)[λ′lbce(s′,s1)+(1−λ′)lbce(s′,s2)]s^\prime = f(g(\lambda^\prime \mathbf{x}_1 + (1 - \lambda^\prime) \mathbf{x}_2))\\ L_{mix} = \mathbb{E}_{(\mathbf{x}_1, \mathbf{x}_2)} [\lambda^\prime l_{bce}(s^\prime, s_1) + (1 - \lambda^\prime) l_{bce}(s^\prime, s_2)]

これによって、曖昧なものを極端に推し進めづらくすることができる。

最後に、Mixupされたデータについても、Entropy Minimizationも行う。

全体

ということで、全体では以下のようになる。

Image in a image block
  • 本体
  • 本体のEntropy Minimization。
  • ミニバッチ内のMixup。
  • ミニバッチ内のMixupされたデータのEntropy Minimization。

実際の実装では、

  1. 単純の「本体」と「本体のEntropy Minimization」だけでWarm Up。
    1. lr=5e-4, 60epochs 走らせる。
  2. 「ミニバッチ内のMixup」と「ミニバッチ内のMixupされたデータのEntropy Minimization」を訓練に使う。(与えられたデータを純粋にそのまま学習に使うことはもうない)

ハイパーパラメタについては以下のように使っていた。α\alphaはmixupのパラメタ。

μ∈[0,0.1],ν∈[0,10],γ∈[0,0.3],α∈[0.1,10]\mu \in [0, 0.1] , \nu \in [0, 10], \gamma \in [0, 0.3], \alpha \in [0.1, 10]

スケジューラはcosineスケジューラを使った。

実験

  • Adamを使用して、 lr=5e-4, weight_decay = 5e-3
  • mix-upは重要。
    • そこで使われるβ分布のα\alphaは適切に大きいのは重要である。
  • DistPUはclass priorを間違えてもある程度強い。